﻿namespace Ficharts.Net
{
    /// <summary>
    /// 区段坐标轴
    /// </summary>
    [Axis("field")]
    public class FieldAxis : AxisBase
    {
        [AxisElement]
        public AxisMode Type { get { return AxisMode.field; } }
    }

    /// <summary>
    /// 线性坐标轴
    /// </summary>
    [Axis("linear")]
    public class LinearAxis : AxisBase
    {
        /// <summary>
        /// 坐标轴的最小刻度.
        /// </summary>
        /// <value>
        /// The minimum.
        /// </value>
        [AxisElement]
        public string Minimum { get; set; }

        /// <summary>
        /// 坐标轴的最大刻度.
        /// </summary>
        /// <value>
        /// The maximum.
        /// </value>
        [AxisElement]
        public string Maximum { get; set; }

        /// <summary>
        /// 是否基于零刻度， 默认为true。默认坐标刻度取值范围取决于数据范围，设置了最大最小值后取值范围为设定值。
        /// baseAtZero 是个特例条件，强制坐标值基于坐标零点正/负向排列，例如一个取值范围是5到100的坐标轴，当baseAtZero开启时取值范围最终为0到100.
        /// </summary>
        /// <value>
        /// The base at zero.
        /// </value>
        [AxisElement]
        public string BaseAtZero { get; set; }

        /// <summary>
        /// 刻度步长，例如当前坐标刻度最小间隔为5， 当设置步长为2时，最小刻度为10.
        /// </summary>
        /// <value>
        /// The user interval.
        /// </value>
        [AxisElement]
        public string UserInterval { get; set; }

        [AxisElement]
        public AxisMode Type { get { return AxisMode.linear; } }
    }

    /// <summary>
    /// 时间坐标轴
    /// </summary>
    [Axis("date")]
    public class DateAxis : AxisBase
    {
        /// <summary>
        /// 时间数据构成格式，默认为 YYYY/MM/DD。
        /// 例如YYYY-MM-DD规定了时间数据必须写成这种格式2012-02-25。 
        /// Y代表年，M代表月，D代表天，h代表小时，m代表分，s代表秒，这些符号间连接字符不限，例如YYYY年MM月DD日也符合.
        /// </summary>
        /// <value>
        /// The input.
        /// </value>
        [AxisElement]
        public string Input { get; set; }

        /// <summary>
        /// 时间数据在图表上显示的格式，默认为YYYY/MM/DD。格式规则同input
        /// </summary>
        /// <value>
        /// The output.
        /// </value>
        [AxisElement]
        public string Output { get; set; }

        [AxisElement]
        public AxisMode Type { get { return AxisMode.date; } }
    }
}
